import { ConfigProvider } from "antd";
import "./global.less";
import { qiankunRender } from "./utils";
import { useState } from "react";

// 添加antd组件class应用名前缀，防止样式污染
ConfigProvider.config({
  prefixCls: "master-ant",
});

// rootContainer (root) 节点最外层没有数据流的 context 上下文
export function rootContainer(container: React.ReactNode) {
  return <ConfigProvider prefixCls={"master-ant"}>{container}</ConfigProvider>;
}

export function render(doRender: () => void) {
  doRender();
}

// 可以在主应用的app.tsx或者layout布局组件中为window添加属性和方法，子应用就可以使用

// 注册子应用
// export const qiankun = {
//   master: {
//     apps: [
//       {
//         name: "app1",
//         entry: "http://localhost:8001",
//       },
//     ],
//     routes: [
//       {
//         path: "/app1",
//         microApp: "app1",
//       },
//     ],
//   },
// };

// 动态注册子应用
export const qiankun = qiankunRender;

// 父子应用通信
export function useQiankunStateForSlave() {
  const [masterState, setMasterState] = useState({
    userInfo: {},
    version: "1.0.0",
    // 将主应用的history下传用于子应用之间的相互跳转【因为子应用的history只能用于应用内部页面的跳转】
    // 子应用也可以使用a标签或者window.open进行跳转
    masterHistory: history,
  });

  return {
    masterState,
    setMasterState,
  };
}
